/**
 * 结构中的函数定义
 * 1.结构体的方法定义还是比较简单的，只需要在 impl 块中定义一个函数即可。但是稍微啰嗦了一些，不能直接在结构体中定义函数。
 * 另外，有类似python的self参数，表示当前结构体实例。
 * 2.结构体方法中，可以访问结构体的字段，也可以调用其他方法。
 */
#[derive(Debug)]
struct Cube{
    length: u32,
    width: u32,
    height: u32,
}
impl Cube{
    fn volume(&self) -> u32{
        return self.length * self.width * self.height;
    }
    fn is_bigger_than(&self, other: &Cube) -> bool{
        return self.volume() > other.volume();
    }
    /**
     * 打印方法
     * 不同于java等oop语言。rust的许多方法默认是静态方法，不需要实例化就可以，也无需特别天年static关键字。
     * 当然，从oop角度看。为方法添加修饰符是更加合适的
     */
    fn print(){
        println!("Hello, world!");
    }
}

fn main() {
    Cube::print();
    let cube = Cube{length: 10, width: 12, height: 25};
    let cube2 = Cube{length: 15, width: 10, height: 30};
    println!("立方体的体积={}立方厘米",cube.volume());
    let is_bigger = cube.is_bigger_than(&cube2);
    match is_bigger{
        true => println!("cube的体积{}大于cube2体积{}",cube.volume(), cube2.volume()),
        false =>println!("cube的体积{}小于cube2体积{}",cube.volume(), cube2.volume()),
    };
}

